package br.ufc.si.bean;

import java.text.DecimalFormat;
import java.util.ArrayList;

import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;

import br.ufc.si.model.AgentePublico;
import br.ufc.si.model.Contrato;
import br.ufc.si.model.Despesas;
import br.ufc.si.model.Licitacao;
import br.ufc.si.model.Municipio;
import br.ufc.si.model.Orgao;

public class ProjetoBean {

	private Municipio municipio;
	private Licitacao licitacao;
	private Orgao orgao;
	private Despesas despesas;
	private AgentePublico agentePublico;
	private Contrato contrato;
	private String ano;
	private String anoComparado;
	private String nome;
	private double total_gastos_orgao;
	private double total_gastos_orgao_2;
	private double diferenca_gastos_entre_orgaos;

	private double total_gastos_licitacao;

	private ContratoBean contratoBean;
	private MunicipioBean municipioBean;
	private LicitacaoBean licitacaoBean;
	private OrgaoBean orgaoBean;
	private DespesasBean despesasBean;
	private AgentePublicoBean agentePublicoBean;

	public ProjetoBean() {
		total_gastos_orgao = 0;
		total_gastos_orgao_2 = 0;
		total_gastos_licitacao = 0;
		diferenca_gastos_entre_orgaos = 0;

		orgao = new Orgao();
		municipio = new Municipio();
		licitacao = new Licitacao();
		despesas = new Despesas();
		agentePublico = new AgentePublico();

		despesasBean = new DespesasBean();
		agentePublicoBean = new AgentePublicoBean();
		municipioBean = new MunicipioBean();
		licitacaoBean = new LicitacaoBean();
		orgaoBean = new OrgaoBean();
		contratoBean = new ContratoBean();

		orgaoBean.setOrgaosSel(new ArrayList<SelectItem>());
		orgaoBean.getOrgaosSel().add(new SelectItem("a", "selecione"));
		licitacaoBean.setLicitacoes(new ArrayList<Licitacao>());

	}

	public String ListarContrato() {

		contratoBean.ListarContrato(municipio.getCodigo(), ano);
		return "";
	}

	public String ListarLicitacoes() {

		licitacaoBean.ListarLicitacao(municipio.getCodigo(), ano);
		return "";

	}

	public String ListarOrgaos() {

		orgaoBean.ListarOrgao(municipio.getCodigo(), ano);

		return "a";

	}

	public String ListarAgentePublico() {

		agentePublicoBean.ListarAgentes(municipio.getCodigo(), ano);
		return "";
	}

	public void getOrgaoPorMunicipio(ValueChangeEvent e) {
		orgaoBean.getOrgaoPorMunicipio(municipio.getCodigo(), ano);
	}

	public String ConsultarAgentePublico() {

		agentePublicoBean.ConsultarAgente(municipio.getCodigo(), nome,
				ano.toString());

		return "";
	}

	public String ConsultarGastosComOrgao() {
		despesasBean.ConsultarGastosComOrgao(municipio.getCodigo(),
				ano.toString(), orgao.getCodigo_orgao());

		for (Despesas desp : despesasBean.despesas) {
			total_gastos_orgao += desp.getValor_total_fixado();
		}

		DecimalFormat df = new DecimalFormat("0.00");
		df.format(total_gastos_orgao);

		return "despesa";
	}

	public String CompararGastosComOrgao() {
		despesasBean.CompararGastosComOrgao(municipio.getCodigo(),
				anoComparado, orgao.getCodigo_orgao());

		for (Despesas desp : despesasBean.despesas_2) {
			total_gastos_orgao_2 += desp.getValor_total_fixado();
		}

		DecimalFormat df = new DecimalFormat("0.00");
		df.format(total_gastos_orgao_2);

		if (total_gastos_orgao > total_gastos_orgao_2) {
			diferenca_gastos_entre_orgaos = total_gastos_orgao
					- total_gastos_orgao_2;
		}

		else {
			diferenca_gastos_entre_orgaos = total_gastos_orgao_2
					- total_gastos_orgao;
		}

		df.format(diferenca_gastos_entre_orgaos);

		return "despesa";
	}

	// gets e sets

	public Municipio getMunicipio() {
		return municipio;
	}

	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}

	public Licitacao getLicitacao() {
		return licitacao;
	}

	public void setLicitacao(Licitacao licitacao) {
		this.licitacao = licitacao;
	}

	public MunicipioBean getMunicipioBean() {
		return municipioBean;
	}

	public void setMunicipioBean(MunicipioBean municipioBean) {
		this.municipioBean = municipioBean;
	}

	public LicitacaoBean getLicitacaoBean() {
		return licitacaoBean;
	}

	public void setLicitacaoBean(LicitacaoBean licitacaoBean) {
		this.licitacaoBean = licitacaoBean;
	}

	public String getAno() {
		return ano;
	}

	public void setAno(String ano) {
		this.ano = ano;
	}

	public OrgaoBean getOrgaoBean() {
		return orgaoBean;
	}

	public void setOrgaoBean(OrgaoBean orgaoBean) {
		this.orgaoBean = orgaoBean;
	}

	public Orgao getOrgao() {
		return orgao;
	}

	public void setOrgao(Orgao orgao) {
		this.orgao = orgao;
	}

	public Despesas getDespesas() {
		return despesas;
	}

	public void setDespesas(Despesas despesas) {
		this.despesas = despesas;
	}

	public AgentePublico getAgentePublico() {
		return agentePublico;
	}

	public void setAgentePublico(AgentePublico agentePublico) {
		this.agentePublico = agentePublico;
	}

	public DespesasBean getDespesasBean() {
		return despesasBean;
	}

	public void setDespesasBean(DespesasBean despesasBean) {
		this.despesasBean = despesasBean;
	}

	public AgentePublicoBean getAgentePublicoBean() {
		return agentePublicoBean;
	}

	public void setAgentePublicoBean(AgentePublicoBean agentePublicoBean) {
		this.agentePublicoBean = agentePublicoBean;
	}

	public Contrato getContrato() {
		return contrato;
	}

	public void setContrato(Contrato contrato) {
		this.contrato = contrato;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public ContratoBean getContratoBean() {
		return contratoBean;
	}

	public void setContratoBean(ContratoBean contratoBean) {
		this.contratoBean = contratoBean;
	}

	public double getTotal_gastos_orgao() {
		return total_gastos_orgao;
	}

	public void setTotal_gastos_orgao(double total_gastos_orgao) {
		this.total_gastos_orgao = total_gastos_orgao;
	}

	public double getTotal_gastos_licitacao() {
		return total_gastos_licitacao;
	}

	public void setTotal_gastos_licitacao(double total_gastos_licitacao) {
		this.total_gastos_licitacao = total_gastos_licitacao;
	}

	public double getTotal_gastos_orgao_2() {
		return total_gastos_orgao_2;
	}

	public void setTotal_gastos_orgao_2(double total_gastos_orgao_2) {
		this.total_gastos_orgao_2 = total_gastos_orgao_2;
	}

	public String getAnoComparado() {
		return anoComparado;
	}

	public void setAnoComparado(String anoComparado) {
		this.anoComparado = anoComparado;
	}

	public double getDiferenca_gastos_entre_orgaos() {
		return diferenca_gastos_entre_orgaos;
	}

	public void setDiferenca_gastos_entre_orgaos(
			double diferenca_gastos_entre_orgaos) {
		this.diferenca_gastos_entre_orgaos = diferenca_gastos_entre_orgaos;
	}

}
